/**
 * 
 */
package edu.uoc.tdp.pac3.server;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Vector;

import edu.uoc.tdp.pac3.common.Acreditacio;
import edu.uoc.tdp.pac3.common.Empleat;

/**
 * Classe que gestiona les dades persistents de Acreditacio
 */
public class GestorDiscAcreditacio {
	/** Objecte connexio */
	private Connection connexio;
	/** Objecte gestor connexio disc */
	private GestorConnexioDisc gcd;
	
	public GestorDiscAcreditacio(GestorConnexioDisc pGcd){
		gcd = pGcd;
		connexio = pGcd.getConexion();
	}
	
	/**
	 * Metode per a introudir una acreditacio a la base de dades a partir d'un objecte Acreditacio
	 * {pre: L'acreditacio no existeix a la base de dades.
	 * 	Hi ha connexio a la base de dades i les dades venen en format correcte}
	 * {post: S'ha introduit una acreditacio a la base de dades}
	 * @param pIdEvent representa l'identificador de l'event
	 * @param pIdEmpleat representa l'identificador de l'empleat
	 * @param pDataAcreditacio representa la data d'alta de l'acreditacio
	 * @throws SQLException - excepcio de la manipulacio de la base de dades
	 * @throws Exception - escepcio general
	 */
	public void introduirAcreditacio (Acreditacio acre) throws SQLException, Exception {
		Statement sentencia = gcd.crearSentencia(); //Crea la sentencia
		connexio.setAutoCommit(false); //Transaccions manuals, o fem tots els canvis o cap
		SimpleDateFormat formatador = new SimpleDateFormat("dd-MM-yyyy");
		String insercioAcreditacio ="INSERT INTO acreditacio (id_event, id_empleat," +
			"data_acreditacio) VALUES(" +
			+ acre.getIdEvent() + "," +
			+ acre.getIdEmpleat() + "," +
			"'" + formatador.format(acre.getDataEvent()) + "'" + ")";
		sentencia.executeUpdate(insercioAcreditacio);
		connexio.commit(); //Confirma els canvis
		connexio.setAutoCommit(true); //Retorna el sistema al commit automatic
		sentencia.close(); //Tanca la sentencia abans de sortir
	}
	
	/**
	 * Metode per a obtenir les acreditacions d'un empleat
	 * @throws SQLException - excepcio de la manipulacio de la base de dades
	 * @throws Exception - escepcio general
	 */
	public Vector<Acreditacio> obtenirAcreditacionsEmpleat(Empleat pEmpleat) throws SQLException, Exception{
		Vector<Acreditacio> v = null;
		
		Statement sentencia = gcd.crearSentencia(); //Crea la sentencia
		connexio.setAutoCommit(false);
		String consulta =("SELECT * FROM acreditacio WHERE id_empleat = ' " +
				+ pEmpleat.getIdEmpleat() + "'");
			
		ResultSet rs = sentencia.executeQuery(consulta);
		if (rs != null){
			v = new Vector<Acreditacio>();
			while (rs.next()){
				int id_Event = rs.getInt(1);
				int id_Empleat = rs.getInt(2);
				Date data_Acreditacio = rs.getDate(3);
				Acreditacio acreditacio = new Acreditacio(id_Event, id_Empleat, data_Acreditacio);
				v.add(acreditacio);
			}
		}
		connexio.commit();
		connexio.setAutoCommit(true);
		sentencia.close();
			
		return v;
	}	
}
